Optimize away trivial opacities
authorMatthias Clasen <mclasen@redhat.com>
Thu, 19 Oct 2017 10:01:02 +0000 (12:01 +0200)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 19 Oct 2017 10:08:39 +0000 (12:08 +0200)
No need to go color matrix on an opacity of 0 or 1.

gtk/gtksnapshot.c

index 2f72614443d4f1661e2b2082ca9c502a638aeb1b..44136679121b75858d1accd1bd0dc8b228cd457c 100644 (file)
@@ -288,11 +288,22 @@ gtk_snapshot_collect_opacity (GtkSnapshot      *snapshot,
   if (node == NULL)
     return NULL;
 
-  opacity_node = gsk_opacity_node_new (node, state->data.opacity.opacity);
-  if (name)
-    gsk_render_node_set_name (opacity_node, name);
-
-  gsk_render_node_unref (node);
+  if (state->data.opacity.opacity == 1.0)
+    {
+      opacity_node = node;
+    }
+  else if (state->data.opacity.opacity == 0.0)
+    {
+      gsk_render_node_unref (node);
+      opacity_node = NULL;
+    }
+  else
+    {
+      opacity_node = gsk_opacity_node_new (node, state->data.opacity.opacity);
+      if (name)
+        gsk_render_node_set_name (opacity_node, name);
+      gsk_render_node_unref (node);
+    }
 
   return opacity_node;
 }
@@ -324,7 +335,7 @@ gtk_snapshot_push_opacity (GtkSnapshot *snapshot,
                                    current_state->translate_x,
                                    current_state->translate_y,
                                    gtk_snapshot_collect_opacity);
-  state->data.opacity.opacity = opacity;
+  state->data.opacity.opacity = CLAMP (opacity, 0.0, 1.0);
 }
 
 static GskRenderNode *